package com.kaifamiao.wendao.servlet;

import com.kaifamiao.wendao.entity.Topic;
import com.kaifamiao.wendao.service.TopicService;
import com.kaifamiao.wendao.util.Pagination;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import java.io.IOException;
import java.util.List;

@WebServlet( "/topic/list" )
public class TopicListServlet extends HttpServlet {

    @Override
    protected void doGet( HttpServletRequest request , HttpServletResponse response )
            throws ServletException, IOException {

        final Integer defaultPageSize = 3 ;
        Integer pageSize ; // 每页最多显示的行数

        HttpSession session = request.getSession();

        // 尝试从请求参数中获取 size
        String size = request.getParameter( "size" );
        // 如果 size 不存在或者是空串 (意味着客户端请求时没有指定size参数或参数是空白)
        if( size == null || ( size = size.trim() ).isEmpty() ) {
            // 则尝试从 会话对象中获取 pageSize 属性
            pageSize = (Integer) session.getAttribute( "pageSize" );
            // 如果会话中没有 pageSize 属性
            if( pageSize == null ) {
                pageSize = defaultPageSize ; // 则给 size 赋予一个默认值
                // 并将 pageSize 设置到 会话对象中
                session.setAttribute( "pageSize" , pageSize );
            }
        } else {
            // 如果客户端请求时指定了 size 参数，则将其转换为 Integer 类型的对象
            pageSize = Integer.valueOf( size );
            if( pageSize <= 0 ) {
                pageSize = defaultPageSize ;
            }
            // 并将由客户端传递过来的 pageSize 设置到会话对象中
            session.setAttribute( "pageSize" , pageSize );
        }

        // 尝试从请求参数中获取 current
        String current = request.getParameter( "current" );
        // 如果 current 不存在或者是空串
        if( current == null || ( current = current.trim() ).isEmpty() ) {
            // 则指定第一页为当前页
            current = "1" ;
        }

        Integer currentPage = Integer.valueOf( current ); // 当前页码

        TopicService ts = new TopicService();

        Integer total = ts.countPages( pageSize ); // 统计总页数

        // 如果客户端请求时指定的 current 参数值大于 总页数
        if( currentPage > total ) {
            // 则以第一页为当前页
            currentPage = 1 ;
        }

        // 查询所有的 话题 并返回 一个 List 集合
        List<Topic> list = ts.paging( currentPage , pageSize );

        Pagination<Topic> pagination = new Pagination<>( pageSize , total , currentPage , list );

        // 将 Pagination 设置到 request 的属性中
        request.setAttribute( "pagination" , pagination );

        String path = "/WEB-INF/pages/topic/list.jsp" ;
        RequestDispatcher dispatcher = request.getRequestDispatcher( path );
        dispatcher.forward( request , response );

    }

}
